Modern processor systems include several operating modes, such as, for example, boot mode, operating system (OS) mode, and OS agnostic mode. In general, a processor system enters the boot mode at the time that the power is initially applied. Following the boot mode, the system enters the OS mode, in which the system will generally remain until the processor system is turned off. At any time during the boot mode or the OS mode the system may switch to the OS agnostic mode. These three operating modes are described in further detail below.
Boot mode refers to the duration of time between when the system is initially powered on and the time that the OS takes control. Examples of boot modes include the basic input output system (BIOS) and the extensible firmware interface (EFI). During the boot mode, the firmware instructions of the processor system are in control of the processor system. To allow the firmware instructions to communicate with any attached hardware components (e.g., keyboard, hard drive, floppy drive, etc.), the processor system includes firmware instructions known as drivers. Drivers are generally stored in system memory such as, for example, flash memory, random access memory (RAM), read only memory (ROM), etc. During the boot mode, the drivers are loaded into memory and used to translate requests from the processor system into commands that the hardware components understand.
To provide common functions to the drivers (e.g., initializing and diagnosing hardware components), a set of abstracted functions are provided by boot services. The boot services provide functions that are commonly executed by the drivers, but are available in the boot services so that each function does not need to be included with each driver. The boot services are generally stored in the system firmware and are loaded into memory early in the boot mode. When one of the drivers needs to perform one of the common functions available in the boot services, the driver makes the call to the boot services that execute any necessary instructions.
Once the processor system completes the boot process, control of the processor system is handed to the OS. When the processor system moves from the boot mode to the OS mode, the boot services and any boot drivers that were loaded into memory may be deleted because the OS provides its own services and drivers. Deleting the boot services and boot drivers frees the system memory for use by the applications, drivers, and services of the OS.
The OS mode refers to the time during which the OS controls the processor system. The OS is a software system that provides control and management of hardware, system operations, and applications that may be run on the processor system. Example OSs include Windows, Unix, Linux, OS-X, etc. The OS provides its own set of drivers and services to communicate with and control the hardware components of the processor system.
OS agnostic mode refers to an operating mode that the processor system enters to perform a specified function, such as, for example, to attempt to reinitialize a hardware component after a failure has been detected. Examples of OS agnostic modes are system management mode (SMM) and platform management mode. The processor system may switch to the OS agnostic mode from the boot mode or the OS mode when a hardware or software interrupt is made by the processor system. For example, a hardware failure may cause the system to switch from the OS mode to the OS agnostic mode to reinitialize the hardware before returning to the OS mode. During OS agnostic mode, like the boot mode, the processor system is controlled by firmware instructions. To allow the firmware instructions to communicate with hardware components, a set of OS agnostic drivers is included with the processor system. To provide functionality to these drivers, a set of abstracted functions is provided by the OS agnostic core. The OS agnostic core, like the boot services, provides common functions to the drivers for managing hardware components so that the functionality does not need to be included in each driver.
The OS agnostic core differs from and includes different limitations than the boot services. Thus, boot drivers must be configured to access the boot services and OS agnostic drivers must be configured to access the OS agnostic core. Accordingly, the same drivers cannot be used during the OS agnostic mode and the boot mode. In other words, the boot mode and the OS agnostic mode cannot share drivers, and therefore, the processor system must include two copies of each of the drivers. This results in duplication of code, increased memory requirements, increased development costs, and the need to update two drivers whenever a change must be made.